package main

import (
	"fmt"
	"time"
)

// select 功能: 解决多个管道的选择问题,也可以叫做多路复用,可以从多个管道公平的选取一个来执行
func main() {
	// 定义并初始化两个管道
	var intCh chan int
	var strCh chan string

	intCh = make(chan int, 25)
	strCh = make(chan string, 25)

	//分别向两个管道存数据
	go func() {
		time.Sleep(time.Second * 5)
		intCh <- 185
	}()
	go func() {
		time.Sleep(time.Second * 2)
		strCh <- "abstract"
	}()

	// 如果哦直接取数据的话,从上到下取,时间花费多的会阻塞,所以引入select
	//fmt.Println(<-intCh)
	//fmt.Println(<-strCh)

	fmt.Println("-----------------------------")

	select {
	case val := <-intCh:
		fmt.Println("intChan:", val)
	case val2 := <-strCh:
		fmt.Println("strCh:", val2)
		//	默认走这个
		//default:
		//	fmt.Println("防止select被阻塞")
	}

	time.Sleep(time.Second * 15)
}
